package com.cwl.data.array;

/**
 * @program: data-structure
 * @description: 数组
 * @author: ChenWenLong
 * @create: 2019-09-10 09:19
 **/
public class MyArray<T> {
    private T[] MyArray;
    private int length = 0;

    /**
     * 功能描述:
     * 〈创建指定大小的数组〉
     *
     * @params : [size]
     * @return :
     * @author : cwl
     * @date : 2019/9/10 9:21
     */
    public MyArray(int size) {
        MyArray = (T[]) new Object[size];
    }

    /**
     * 功能描述:
     * 〈默认大小的数组 大小为10〉
     *
     * @params : []
     * @return :
     * @author : cwl
     * @date : 2019/9/10 9:21
     */
    public MyArray() {
        MyArray = (T[]) new Object[10];
    }

    /**
     * 功能描述:
     * 〈往数组中插入数据〉
     *
     * @params : [item]
     * @return : void
     * @author : cwl
     * @date : 2019/9/10 9:22
     */
    public void insert(T item) {
        MyArray[length++] = item;
    }

    /**
     * 功能描述:
     * 〈确定该元素是否在数组当中〉
     *
     * @params : [item]
     * @return : boolean
     * @author : cwl
     * @date : 2019/9/10 9:23
     */
    public boolean isCantain(T item) {
        for (int i = 0; i < length; i++) {
            if (MyArray[i] == item) {
                return true;
            }
        }
        return false;
    }

    /**
     * 功能描述:
     * 〈找到对应元素的索引〉
     *
     * @params : [item]
     * @return : int
     * @author : cwl
     * @date : 2019/9/10 9:25
     */
    public int findIndex(T item) {
        for (int i = 0; i < length; i++) {
            if (MyArray[i] == item) {
                return i;
            }
        }
        return -1;
    }

    /**
     * 功能描述:
     * 〈删除某个元素〉
     *
     * @params : [item]
     * @return : boolean
     * @author : cwl
     * @date : 2019/9/10 9:26
     */
    public boolean delete(T item) {
        int i = 0;
        for (i = 0; i < length; i++) {
            if (item == MyArray[i]) {
                break;
            }
        }
        if (i == length)
            return false;
        for (int j = i; j < length - 1; j++) {
            MyArray[j] = MyArray[j + 1];
        }
        length--;
        return true;
    }

    /**
     * 功能描述:
     * 〈打印数组〉
     *
     * @params : []
     * @return : void
     * @author : cwl
     * @date : 2019/9/10 9:26
     */
    public void show() {
        System.out.print("[");
        for (int i = 0; i < length; i++) {
            if (i == length - 1)
                System.out.print(MyArray[i]);
            else {
                System.out.print(MyArray[i] + ", ");
            }
        }
        System.out.print("]\n");
    }
}
